/*
 * 题目描述：给出两个链表头，和链表节点，找到链表的公共尾部的开始的地址
 *
 * 思路：先遍历第一个链表标记每一个经过的节点然后，当第二个链表从头遍历的时候碰到的第一个节点被用过的节点就是答案
 *
 * 坑：给出数据的头部直接就是-1
 */
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

int adds[100001] = {0};
int flags[100001] = {0};
int main() {
    fill_n(adds, 100001, 999999);
    std::ios::sync_with_stdio(false);
    int head1, head2, add1, add2;
    int N;
    cin >> head1 >> head2 >> N;

    char ch;
    while (N--) {
        cin >> add1 >> ch >> add2;
        adds[add1] = add2;
    }
    if (head1 == head2) {
        printf("%05d", head1);
        return 0;
    }
    if (head1 == -1 || head2 == -1) {
        cout << "-1";
        return 0;
    }
    while (adds[head1] != -1 && adds[head1] != 999999) {
        flags[head1]++;
        head1 = adds[head1];
    }
    while (adds[head2] != -1 && adds[head2] != 999999) {
        if (flags[head2] != 0) {
            if (head2 < 0) {
                printf("-1");
            } else {
                printf("%05d", head2);
            }
            return 0;
        }
        head2 = adds[head2];
    }
    cout << "-1";
    return 0;
}
//超时，Map版本
//#include <iostream>
//#include <cstdio>
//#include <map>
//#include <vector>
//#include <cstring>
//using namespace std;
//
//struct Data{
//    char ch;
//    int next;
//    int flag;
//};
//
//map<int,Data> m;
//
//int main() {
//    int head1, head2;
//    char add1[10], add2[10];
//    int N;
//    scanf("%d %d %d", &head1, &head2, &N);
//    if (head1 == head2) {
//        printf("%d", head1);
//        return 0;
//    }
//    char ch;
//    Data d;
//    while (N--) {
//        scanf("%s %c %s", add1, &ch, add2);
//        d.ch = ch;
//        d.next = strcmp(add2 ,"NULL")==0 ? -1 : stoi(add2);
//        m[strcmp(add1 ,"NULL")==0 ? -1 : stoi(add1)] = d;
//    }
//    vector <struct Data> v1, v2;
//    while (m.find(head1) != m.end()) {
//        m[head1].flag = 1;
//        head1 = m[head1].next;
//    }
//    while (m.find(head2) != m.end()) {
//        if (m[head2].flag == 1) {
//            if (head2 != -1) {
//                printf("%05d", head2);
//            }else{
//                printf("-1");
//            }
//            return 0;
//        }
//        head2 = m[head2].next;
//    }
//    printf("-1");
//    return 0;
//}
